package Lista_5;

import java.util.ArrayList;

public class RozkladLiczby {

	public boolean[] tab;
	public int[] najmniejszyDzielnik;

	
	public RozkladLiczby(int n) throws Wyjatek{
		if(n<2){
			throw new Wyjatek();
		}
		
			this.tab = new boolean[n+1];
			this.najmniejszyDzielnik = new int[n+1];
			for(int i=2;i*i<=n;i++){
				//System.out.println("i - "+i);
//				if(tab[i]){				
//					continue;
//				}
				for(int j=2*i;j<=n;j+=i){
					//System.out.println("j - "+j);
					tab[j] = true;
					if(najmniejszyDzielnik[j] == 0){
						najmniejszyDzielnik[j] = i;
					}
					
				}
			}
			for(int i=2;i<tab.length;i++){
				if(tab[i] == false){
					najmniejszyDzielnik[i] = i;
				}
			}
	}
	public int[] czynnikiPierwsze(int m){

		ArrayList<Integer> TCP = new ArrayList<Integer>();
		while(m>=2){
			TCP.add(najmniejszyDzielnik[m]);
			m = m / najmniejszyDzielnik[m];
			
			
		}
		int[] tabCzynnikiPierwsze = new int[TCP.size()];
		for(int i=0;i<TCP.size();i++){
			tabCzynnikiPierwsze[i] = TCP.get(i);
		}
//		for(int i=0;i<tabCzynnikiPierwsze.length;i++){
//			System.out.print(tabCzynnikiPierwsze[i]+" ");
//		}
		return tabCzynnikiPierwsze;
	}
	public String  wyswietlanie(int liczba,int[]tab){
		String wyjscie = Integer.toString(liczba);
		wyjscie += " = ";
		int licznik = 0;
		Wyswietlanie w;
		ArrayList<Wyswietlanie> wyswietlanie = new ArrayList<Wyswietlanie>();
		for(int i=0;i<tab.length;i++){
			for(int j=0;j<tab.length;j++){
				if(tab[i] == tab[j]){
					licznik++;
				}
			}
			if(wyswietlanie.size()>0){
				w = new Wyswietlanie(tab[i], licznik);
				if(wyswietlanie.get(wyswietlanie.size()-1).liczba == w.liczba && wyswietlanie.get(wyswietlanie.size()-1).potega == w.potega){
					
				}
				else{
					wyswietlanie.add(w);
				}
			}
			else{
				wyswietlanie.add(new Wyswietlanie(tab[i], licznik));
			}
			licznik = 0;
		}
		for(int i=0;i<wyswietlanie.size();i++){
			if(wyswietlanie.get(i).potega == 1){
				wyjscie += wyswietlanie.get(i).liczba;
				if(i != wyswietlanie.size()-1){
					wyjscie += "*";
				}
			}
			else{
				wyjscie += wyswietlanie.get(i).liczba+"^"+wyswietlanie.get(i).potega;
				if(i != wyswietlanie.size()-1){
					wyjscie += "*";
				}
			}
			
			
		}
		return wyjscie;
	}

}
















